<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Navigation Timing IDL tests</title>
<link rel="author" title="W3C" href="http://www.w3.org/" />
<link rel="help" href="http://www.w3.org/TR/navigation-timing/#sec-navigation-timing-interface"/>
<link rel="help" href="http://www.w3.org/TR/navigation-timing/#sec-navigation-info-interface"/>
<link rel="help" href="http://www.w3.org/TR/navigation-timing/#sec-window.performance-attribute"/>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/resources/webidl2/lib/webidl2.js"></script>
<script src="/resources/idlharness.js"></script>
</head>
<body>
<h1>Navigation Timing IDL tests</h1>
<div id="log"></div>

<pre id='untested_idl' style='display:none'>

[PrimaryGlobal]
interface Window {
};

callback interface EventListener {
  void handleEvent(Event event);
};

interface Event {
    // PhaseType
    const unsigned short NONE = 0;
    const unsigned short CAPTURING_PHASE = 1;
    const unsigned short AT_TARGET = 2;
    const unsigned short BUBBLING_PHASE = 3;
    readonly    attribute DOMString      type;
    readonly    attribute EventTarget?   target;
    readonly    attribute EventTarget?   currentTarget;
    readonly    attribute unsigned short eventPhase;
    readonly    attribute boolean        bubbles;
    readonly    attribute boolean        cancelable;
    readonly    attribute DOMTimeStamp   timeStamp;
    void stopPropagation ();
    void preventDefault ();
    void initEvent (DOMString eventTypeArg, boolean bubblesArg, boolean cancelableArg);
    // Introduced in DOM Level 3
    void stopImmediatePropagation ();
    readonly    attribute boolean        defaultPrevented;
    readonly    attribute boolean        isTrusted;
};

interface EventTarget {
    // Modified in DOM Level 3
    void    addEventListener (DOMString type, EventListener? listener, optional boolean useCapture = false);
    void    removeEventListener (DOMString type, EventListener? listener, optional boolean useCapture = false);
    boolean dispatchEvent (Event event);
};

</pre>

<pre id='idl'>
interface PerformanceTiming {
  readonly attribute unsigned long long navigationStart;
  readonly attribute unsigned long long unloadEventStart;
  readonly attribute unsigned long long unloadEventEnd;
  readonly attribute unsigned long long redirectStart;
  readonly attribute unsigned long long redirectEnd;
  readonly attribute unsigned long long fetchStart;
  readonly attribute unsigned long long domainLookupStart;
  readonly attribute unsigned long long domainLookupEnd;
  readonly attribute unsigned long long connectStart;
  readonly attribute unsigned long long connectEnd;
  readonly attribute unsigned long long secureConnectionStart;
  readonly attribute unsigned long long requestStart;
  readonly attribute unsigned long long responseStart;
  readonly attribute unsigned long long responseEnd;
  readonly attribute unsigned long long domLoading;
  readonly attribute unsigned long long domInteractive;
  readonly attribute unsigned long long domContentLoadedEventStart;
  readonly attribute unsigned long long domContentLoadedEventEnd;
  readonly attribute unsigned long long domComplete;
  readonly attribute unsigned long long loadEventStart;
  readonly attribute unsigned long long loadEventEnd;
};

interface PerformanceNavigation {
  const unsigned short TYPE_NAVIGATE = 0;
  const unsigned short TYPE_RELOAD = 1;
  const unsigned short TYPE_BACK_FORWARD = 2;
  const unsigned short TYPE_RESERVED = 255;
  readonly attribute unsigned short type;
  readonly attribute unsigned short redirectCount;
};

interface Performance : EventTarget {
  readonly attribute PerformanceTiming timing;
  readonly attribute PerformanceNavigation navigation;
};

partial interface Window {
  [Replaceable] readonly attribute Performance performance;
};
</pre>

<script>
(function() {
  var idl_array = new IdlArray();

  idl_array.add_untested_idls(document.getElementById("untested_idl").textContent);
  idl_array.add_idls(document.getElementById("idl").textContent);

  idl_array.add_objects({Window: ["window"],
                         Performance: ["window.performance"],
                         PerformanceNavigation: ["window.performance.navigation"],
                         PerformanceTiming: ["window.performance.timing"]});

  idl_array.test();
})();
</script>
</body>
</html>
